/*******************************************************************************
* Copyright (c) 2008, Jeferson Jose de Miranda                                 *
* UDESC - Universidade do Estado de Santa Catarina                             *
* All rights reserved.                                                         *
*                                                                              *
* Redistribution and use in source and binary forms, with or without           *
* modification, are permitted provided that the following conditions are met:  *
*     * Redistributions of source code must retain the above copyright         *
*       notice, this list of conditions and the following disclaimer.          *
*     * Redistributions in binary form must reproduce the above copyright      *
*       notice, this list of conditions and the following disclaimer in the    *
*       documentation and/or other materials provided with the distribution.   *
*     * Neither the name of the Universidade do Estado de Santa Catarina nor   *
*       the names of its contributors may be used to endorse or promote        *
*       products derived from this software without specific prior written     *
*       permission.                                                            *
*                                                                              *
* THIS SOFTWARE IS PROVIDED BY JEFERSON JOSE DE MIRANDA "AS IS" AND ANY        *
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED    *
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE       *
* DISCLAIMED. IN NO EVENT SHALL JEFERSON JOSE DE MIRANDA BE LIABLE FOR ANY     *
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES   *
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND  *
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   *
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF     *
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.            *
*******************************************************************************/

/**
 * \file ROI.hpp
 *
 * \brief Image Region of Interest metadata management.
 *
 * \author Jeferson Jose de Miranda
 */

#ifndef ROI_HPP
#define ROI_HPP

#include <cv.h>

namespace MoveIn
{
    /**
    * \class ROI
    *
    * \brief Region of Interest metadata management.
    */
    class ROI
    {
        private:
        CvRect roi;

        public:
        ROI(unsigned int start_x,
            unsigned int start_y,
            unsigned int width,
            unsigned int height);

        ROI(CvRect r);

        void setROI(unsigned int start_x,
                    unsigned int start_y,
                    unsigned int width,
                    unsigned int height);

        void setROI(CvRect r);

        CvRect getROI();

        void translate(unsigned int x, unsigned int y);

        void translateX(unsigned int x);

        void translateY(unsigned int y);
};

/*******************************************************************************
* MoveIn::ROI::ROI                                                             *
*******************************************************************************/

    ROI::ROI(unsigned int start_x,
             unsigned int start_y,
             unsigned int width,
             unsigned int height)
    {
        setROI(start_x, start_y, width, height);
    }

/*******************************************************************************
* MoveIn::ROI::ROI                                                             *
*******************************************************************************/

    ROI::ROI(CvRect r)
    {
        setROI(r);
    }

/*******************************************************************************
* MoveIn::ROI::setROI                                                          *
*******************************************************************************/

    void ROI::setROI(unsigned int start_x,
                     unsigned int start_y,
                     unsigned int width,
                     unsigned int height)
    {
        roi.x = start_x;
        roi.y = start_y;
        roi.width = width;
        roi.height = height;
    }

/*******************************************************************************
* MoveIn::ROI::setROI                                                          *
*******************************************************************************/

    void ROI::setROI(CvRect r)
    {
        roi = r;
    }

/*******************************************************************************
* MoveIn::ROI::getROI                                                          *
*******************************************************************************/

    CvRect ROI::getROI()
    {
        return roi;
    }

/*******************************************************************************
* MoveIn::ROI::translate                                                       *
*******************************************************************************/

    void ROI::translate(unsigned int x, unsigned int y)
    {
        translateX(x);
        translateY(y);
    }

/*******************************************************************************
* MoveIn::ROI::translateX                                                      *
*******************************************************************************/

    void ROI::translateX(unsigned int x)
    {
        roi.x += x;
    }

/*******************************************************************************
* MoveIn::ROI::translateY                                                      *
*******************************************************************************/

    void ROI::translateY(unsigned int y)
    {
        roi.y += y;
    }
}

#endif


